package craneding.gwt.databean.client.model;

/**
 * Field Info
 * 
 * @author crane.ding
 * @version 1.0 2008-11-27
 */
public @interface FieldInfo {

	/**
	 * <ul>
	 * html input element
	 * <li>text 单行文本框{@link com.google.gwt.user.client.ui.TextBox}</li>
	 * <li>textarea 多行文本框 {@link com.google.gwt.user.client.ui.TextArea}</li>
	 * <li>password 密码输入框 {@link com.google.gwt.user.client.ui.PasswordTextBox}</li>
	 * <li>calendar 日期输入框 {@link }</li>
	 * <li>select 下拉列表框 {@link com.google.gwt.user.client.ui.ListBox}</li>
	 * <li>checkbox 复选 {@link com.google.gwt.user.client.ui.CheckBox}</li>
	 * <li>radio 单选按钮 {@link com.google.gwt.user.client.ui.RadioButton}</li>
	 * <li>file 文件上传文本框 {@link com.google.gwt.user.client.ui.FileUpload}</li>
	 * <li>image 图片 {@link com.google.gwt.user.client.ui.Image}</li>
	 * <li>hidden 不会出现在屏幕上的输入框 {@link com.google.gwt.user.client.ui.Hidden}</li>
	 * </ul>
	 * 
	 * @author crane.ding
	 * @version 1.0 2008-12-1
	 */
	public enum UI {
		defaultUI, text, numbertext, textarea, password, calendar, select, checkbox, radio, file, image, hidden
	}

	/**
	 * 显示名称
	 */
	String label() default "";

	/**
	 * 长度
	 */
	int length() default -1;

	/**
	 * 对于number类型，指定小数点后的位数
	 */
	int fractions() default -1;

	/**
	 * 验证正则表达式
	 */
	String regexp() default "";

	/**
	 * 是否必须
	 */
	boolean required() default false;

	/**
	 * 帮助信息
	 */
	String description() default "";

	/**
	 * 显示ui组件 text, textarea, password, calendar, select, checkbox, file, image
	 */
	UI ui() default UI.defaultUI;

	/**
	 * 缺省图标
	 */
	String icon() default "";

	/**
	 * 新对象时是否可以编辑
	 */
	boolean createEditable() default true;

	/**
	 * 更新对象时是否可以编辑
	 */
	boolean updateEditable() default true;

	/**
	 * 属性分组
	 */
	String category() default "";

	/**
	 * 数据类型，一般由定义进行推出。
	 * <ul>
	 * 支持：
	 * <li>byte, short, char, int, long, float, double
	 * <li>Byte, Short, Character, Integer, Long, Float, Double
	 * <li>Date
	 * </ul>
	 */
	Class<?> datatype() default Object.class;

	/**
	 * 如果当前字段是一个Enum类型，说明该Enum的key类型
	 */
	Class<?> enumKey() default Object.class;

}
